Hallo Heiko,
vielen Dank für deine ausführliche Antwort!! Da hast du dir ja echt Mühe gegeben. Jetzt ist mir einiges klarer geworden. Ich habe die Rückgabe eines Datenfeldes per Function dazu gebraucht um aus einer Dezimalzahl eine Dualzahl zu machen. Nach langem Probieren bekomme ich das Programm nicht zum Laufen, obwohl ich die Änderungen eingebaut habe, die du vorgeschlagen hast. Ich habe auch deine Erläuterungen bezüglich Datenfeldübergabe in einem einfachen Testprogramm überprüft und da funktioniert alles. Das habe ich dann in meinem Dualzahlprogramm auch genauso gemacht - aber es läuft nicht.
Es wäre sehr nett wenn du dir den Code mal ansehen könntest - ich hoffe, daß es dir nicht zu lästig ist?
Es kommt es zu einem Laufzeitfehler 13: "Typen unverträglich" in dieser Zeile (bei "End Function") :
'Werte zurückgeben über FunctionNamen "dualerzeugen"
dualerzeugen = t
End Function
-------------------------------------------------------------------------------
hier der ganze Code:
-------------------------------------------------------------------------------
Public i, n, s As Integer
Sub Dualzahlerzeugen()
Dim r, e() As Integer
'einlesen
r = Range("c2")
'das Datenfeld "e" mit der Funktion "dualerzeugen" füllen
e = dualerzeugen(r)
'ausgeben, 'Startzelle
s = 5
For i = o To n
Cells(5 + i, 2) = "2^" & i
Cells(5 + i, 3) = e(i)
Next
End Sub
Function dualerzeugen(r) As Variant
Dim t(), z() As Integer
'n bestimmen
i = 0
Do Until (2 ^ i > r)
i = i + 1
Loop
n = i - 1
' t(), z(), e() dimensionieren
ReDim t(n)
ReDim z(n + 1)
ReDim e(n)
' t() mit Nullen füllen
For i = 0 To n
t(i) = 0
Next
Do Until (r = 0)
i = 0
Do
z(i) = 2 ^ i
i = i + 1
Loop Until (z(i - 1) > r)
r = r - z(i - 2)
't() mit 1 füllen, da wo eine hingehört
t(i - 2) = 1
Loop
'Werte zurückgeben über FunctionNamen "dualerzeugen"
dualerzeugen = t
End Function
Ich wünsche dir noch einen schönen Abend und bedanke mich recht herzlich für deine Hilfe!
Gruß, Jörg
|